#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<sys/wait.h>



int main()
{
    pid_t id = fork();

    if(id == 0)
    {
        //child
        int cnt = 10;
        while(cnt)
        {
            printf("child -> pid : %d, ppid : %d \n",getpid(),getppid());
            sleep(1);
            cnt--;
        }
        exit(10);
        //只是子进程退出了
    }
    else{
        //parent
        sleep(20);
        int status =0 ;
        pid_t ret = waitpid(id, &status,0);
        //id就是子进程的pid， 
        //status获取的子进程返回值存放的变量，
        //0（不用管，表示阻塞式等待。
        //成功返回子进程pid，不成功返回-1；
        
        
        //pid_t ret = wait(NULL);
        //成功返回子进程pid，不成功返回-1；
        if(ret > 0 )
        {
            printf("wait success ; child pid: %d; child ret: %d  \n",ret, status);
            printf("child sig numder:%d ; child exit code:%d \n",(status&0x7F), (status>>8)&0xFF);
        }
        sleep(10);
    }


    return 0;
}

//
//int main()
//{
//    printf("zhang zhang zhang !!!");
//
//    sleep(3);
//
//
//   // exit(11);//会在休眠3秒后显示 打印的结果
//    _exit(11);//会在休眠3秒后直接退出不会打印结果。
//}
//


//int fun()
//{
//    printf("int fun()\n");
//    //return 100;//使用return的时候是函数的返回
//
//    exit(100);//用exit进程就直接退出了
//}
//
//
//int main()
//{
//    int ret = fun();
//    printf("%d",ret);
//    while(1){ ; }
//}
//





//bint main()
//{
    



    //for(int i =0; i<200; i++)
    //{
    //   char* ret = strerror(i);
    //   printf("%i:%s\n",i,ret);
    //}





    //int a =1,b=1;
    //if((a+b) == 3)
    //    return 0;
    //else
    //    return 1;


    //////printf("test makefile\n");
    ////pid_t ret;
    //ret = fork();
    //if(ret== -1){
    //    perror("fork:");
    //    exit(1);
    //}
    //if(ret == 0)
    //{
    //    printf("this is child ;ret : %d ;&ret:%p\n",ret ,&ret);
    //}
    //else{
    //    printf("this is parent;ret : %d ;&ret:%p\n",ret ,&ret);
    // }
    //sleep(1);
    //return 0;
//}
